<?php

namespace App\Http\Controllers;

use App\Http\Requests\RegistRequest;
use App\Mail\RegistMail;
use App\User;
use Illuminate\Http\Request;
use Validator;
use Mail;
class RegistController extends Controller
{
    //
    public function regist(){
        return view('regist');
    }
    /**
     * 处理注册功能方法
     */

    public  function  store(Request $request,RegistRequest $registRequest){
        //配好路由之后还不能展示页面内容，因为laravel框架不识别我们的from表单
        //这里需要参考手册CSRF 保护 完成之后处理注册功能
        //echo '我来处理注册';
        //验证规则
        //1.用户名邮箱及密码必填
        //2.邮箱的格式必须正确
        //3.密码有明确的长度两次密码输入必须一致
        //在这里依赖注入使用Request这个类注入到当前的这个方法的参数中  这时候会自动帮我们实例化出来一个变量的对象
        //Request的使用在手册的请求里面
        //用$request对象来获取post请求的数据
        //$post = $request->all();
        //laravel框架自带的dd打印方法  包含die
        //dd($post);

        //使用框架提供的验证类创建和定义验证方法
        //make方法在_ide_helper里面的Validator类里面
        //括号里第一个参数指的是要验证的是谁（在这里验证$post数据），第二个参数是制定验证规则 在这里是一个数组 a=>b的格式
//        $validator = Validator::make($post,[
//            'username'=>'required',
//            'email'=>'required|email',
//            'password'=>'required|between:6,16|confirmed',//手册中查看confirmed
//            'password_confirmation'=>'required|between:6,16'
//        ]);
        //检测验证规则是否正确
        //如果这里的fails返回值为真，代表验证规则不满足，这时候就应该提示用户错误信息并返回
        //if($validator->fails()){
            //redirect跳转
            //如果跳转的时候直接写路由规则 就在redirect()方法内传递路由规则参数
            //调用withErrors($validator)方法;分配一个errors数据把$validator错误数据分配到模板中
            //return redirect('/regist')->withErrors($validator);
        //}
        //echo '123';
        //如果使用表单验证类完成验证会走进这个方法 否则返回
        //laravel框架默认不允许一次性给一条数据添加多个字段值
        $post = $request->all();
        //将数据中的用户名密码password加密
        $post['password']=bcrypt($post['password']);
        //添加完字段后实行注册会报错这时候往post数据中添加一个email_token的随机字符串的值
        $post['email_token'] = str_random(10);
        //create方法会将新添加的数据返回来
        $user = User::create($post);
        //dd($user);
        //Mail类中的to方法是指发送给谁，这里需要给一个数据对象，注意的是toi的数据对象里面必须包含eamil字段
        //seed方法序言传递的参数是你要用哪个类邮件完成邮件发送 也就是这里的RegistMail
        //发送邮件的步骤：1.先执行命令创建一个邮件类，在类里面build方法里面自动加载需要展示的模板，2.在注册功能类里面执行Mail to方法发送邮件，3.发送的前提是去env里面配置文件
        Mail::to($user)->send(new RegistMail($user['email_token']));
        //设置闪存信息并跳转
        session()->flash('success','注册成功！！！请前往邮箱激活账号！');
        return redirect('/');

    }
    public function jihuo($token){
        //echo '我是用来激活的方法';
        //由于地址栏get参数是email_token，所以我们应该找到数据库中email_token等于$token的数据
        //where方法的第一个参数是数据表中字段的名称
        //第二个参数是判断条件
        //第三个参数数需要判断的值
        //注意：如果判断条件是= 第二个参数可以是省略 其他的都不能省略
        $user = User::where('email_token','=',$token)->first();
        //dd($user);
        //将找到的用户数据状态改为1
        if($user){
            //如果能找到用户数据才进行修改
            $user->status = 1;
            $user->save();
            //如果想激活账号之后自动帮用户登录直接调用方法
            \Auth::login($user);
            //设置闪存信息并跳转
            session()->flash('success','恭喜账号激活成功！！！');
            return redirect('/');
        }
        //如果找不到账号就会运行到这里
        session()->flash('danger','账号不存在！！！');
        return redirect('/');



    }
}
